Reduce background Git ref and port polling#4187
Conversation
- Poll first ref pages every 20 seconds and refresh menus on open - Avoid duplicate port scans and adapt lsof polling to activity - Document the retained freshness guarantees
…nd-git-ref-port-polling
…nd-git-ref-port-polling
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
ApprovabilityVerdict: Needs human review This PR significantly modifies polling intervals and subscription notification mechanics, changing how data freshness is managed throughout the application. The new semaphore-based serialization and state-dependent polling represent meaningful behavioral changes that warrant human review. You can customize Macroscope's approvability policy. Learn more. |
…nd-git-ref-port-polling
- Order subscription replay with concurrent snapshot broadcasts - Cover replay ordering with a focused concurrent regression test - Document the preview notification ordering guarantee
…nd-git-ref-port-polling
Summary
Reduce persistent background work from Git ref enumeration and preview port discovery while preserving freshness when users interact with either surface.
What Changed
Why
During extended use, T3 Code's resident memory climbed past 6 GB even while idle, while the renderer sustained roughly 10% CPU and the machine became noticeably warm around the CPU and GPU clusters. That pattern indicated that background work was continuing without user interaction and could compound renderer and resource pressure over long sessions.
Diagnostics identified two repeatable sources of idle churn: every retained Git-ref query, including each loaded pagination page, owned its own five-second
listRefsrevalidation loop, while preview discovery launched a broadlsofscan every three seconds. Preview subscription initialization could also scan twice, and unchanged terminal process registrations caused redundant probes. The new schedules reduce that steady subprocess load while immediate menu refreshes, terminal-process-triggered scans, and adaptive safety-net polling preserve freshness at interaction time.Validation
git diff --checkpassedProof
No standalone proof artifacts were captured; the isolated browser verification is summarized above.
Note
Medium Risk
Changes timing and ordering of preview discovery and Git ref freshness paths that many UI surfaces depend on; regressions could show stale ports/refs or missed updates, but scope is bounded and covered by new port-scanner tests.
Overview
Reduces steady background subprocess and RPC churn from Git ref listing and preview port discovery, aimed at lowering idle CPU/memory use during long sessions.
Git refs (
vcs.ts) — First-page ref lists revalidate every 20s (was 5s). Inactive ref atoms expire after 30s (was 5 minutes). Paginated/cursorlistRefsqueries no longer tick on an interval; they fetch once per connected generation.UI (
DiffPanel.tsx) — Opening the branch comparison ref combobox callsrefresh()on local and remote ref queries so the menu is up to date without waiting for the slower background interval.Preview ports (
PortScanner.ts,ws.ts) — Replaces a fixed 3slsof/probe loop with 10s when a listener is known and 20s when idle or empty.retainstill triggers an immediate scan when discovery was idle;subscribereplayslastSnapshotunder a semaphore so replay and broadcasts cannot reorder. Unchanged terminal PID registrations and no-op unregisters skip extra scans; real changes stillpollTickimmediately. WebSocketsubscribeDiscoveredLocalServersdrops the extrascan()on subscribe and relies on retain + subscribe replay.Tests — Adds coverage for unchanged registration deduping and ordered delivery under concurrent replay/broadcast.
Docs — Adds
BRANCH_DETAILS.mddescribing expected behavior and dev ports.Reviewed by Cursor Bugbot for commit 8f2fdbb. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Reduce background Git ref and port polling frequency
Semaphore, preventing out-of-order delivery and stale replays after newer scansDiffPanelnow triggers an immediate refresh of local and remote branch refsMacroscope summarized 8f2fdbb.